home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 001-025 / scopedisk8 / superlib / libsrc / bmov.asm < prev    next >
Assembly Source File  |  1995-03-18  |  1KB  |  64 lines

  1.  
  2. ;BMOV.ASM
  3. ;      4    812
  4. ;BMOV(src,dest,bytes)
  5. ;
  6. ;   Matthew Dillon
  7. ;
  8. ;   -Handles ascending/descending moves
  9. ;   -Optimizes the move if addresses longword boundries and #bytes
  10. ;    is a multiple of 4.
  11. ;   -Completely tested
  12.  
  13. xdef  _bmov
  14.  
  15. _bmov
  16. movem.l 4(A7),A0/A1;source, destination
  17. move.l12(A7),D0;bytes
  18. clr.bD1;long word boundry flag
  19. andi.b#3,15(A7);byte count multiple of 4?
  20. bnenotlwb
  21. andi.b#3,7(A7);source mulitple of 4?
  22. bnenotlwb
  23. andi.b#3,11(A7);destination multiple of 4?
  24. seq.bD1;set longword boundry flag if true
  25. notlwbcmp.lA0,A1
  26. beqend;trivial case
  27. bleascend;ascending copy
  28. add.lD0,A0;descending copy
  29. add.lD0,A1
  30.  
  31. decendtst.bD1;DESCEND
  32. beqdecbyte
  33. declong lsr.l#2,D0;DESCEND LONGWORD
  34. braab00
  35. ab0move.l-(A0),-(A1)
  36. ab00dbf.wD0,ab0
  37. sub.l#$10000,D0
  38. bplab0
  39. endrts
  40.  
  41. ab1move.b-(A0),-(A1);DESCEND BYTE
  42. decbyte dbf.wD0,ab1
  43. sub.l#$10000,D0
  44. bplab1
  45. rts
  46.  
  47. ascendtst.bD1;ASCEND
  48. beqascbyte
  49. asclong lsr.l#2,D0;ASCEND LONGWORD
  50. braab22
  51. ab2move.l(A0)+,(A1)+
  52. ab22dbf.wD0,ab2
  53. sub.l#$10000,D0
  54. bplab2
  55. rts
  56.  
  57. ab3move.b(A0)+,(A1)+;ASCEND BYTE
  58. ascbyte dbf.wD0,ab3
  59. sub.l#$10000,D0
  60. bplab3
  61. rts
  62.  
  63.  
  64.